-
Notifications
You must be signed in to change notification settings - Fork 2.1k
QUIC support #5706
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
QUIC support #5706
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
b995822 to
1675ba4
Compare
9a84e2a to
20c87a8
Compare
9ac3236 to
e6a643e
Compare
eef66ea to
a3a8965
Compare
8336c4d to
c79ddc6
Compare
Motivation: TCPSSLOptions is an aggregate of state that carries TCP configuration (as the name says) among others. In sight of having a NetServer being capable of using a QUIC transport, we should encapsulate the TCP portion of the state in a specific class. Changes: Extract the TCP portion of the TCPSSLOptions and NetworkOptions in a TcpOptions class as a transportOptions field, it is possible to get this field with a getter. The TCPSSLOptions now delegates to the transportOptions field its getters/setters. The Transport SPI is updated to only use the TcpOptions configuration. The Transport SPI now only handle the TCP configuration and leaves the general channel config to the caller.
Motivation: Our implementation has maintained a VertxSslContext wrapping an SslContext to configure a few aspects of the SSL engine. This does not seem necessary anymore since SslContext has all the necessary configuration options on the SslContextBuilder. Changes: Update the SslContextFactory to handle the configuration aspects VertxSslContext was implementing. Remove VertxSslContext wrapper and configure the options instead on the SslContextFactory.
…nection Motivation: ConnectionBase carries a reason/timeout set of interactions for closing a connection that is superfluous for ConnectionBase since users of it are subclasseing VertxConnection. We aim to have ConnectionBase more reusable and universal for non vertx based connections (such as HTTP/2) yet retain this for vertx based connections (HTTP/1.1, WebSocket).
…t part of NetSocket which is a TCP socket
Motivation: Letting VertxConnection subclasses manage the shutdown handler gives more flexibility and is a concerned removed from the VertxConnection that focuses on its state management and control flow without caring about interactions.
…class. Motivation: Since only WebSocket use an effective close reason, we should move this generic part of the VertxConnection to WebSocketConnection implementation to simplify unclutter VertxConnection and keep it focus on its responsibitlies.
Motivation: The VertxConnection relies on Netty channel close, instead it should be separate and keep channel close as short as possible.
…ionGroup class Motivation: NetServer and NetClient both combine a close sequence with a channel group to implement graceful shutdown of an endpoint. We should encapsulate it to share the code between NetServer and NetClient and reuse it in Quic.
Motivation: Quic can be properly supported since it is out of incubation from Netty, it provides a new transport for building middlewares on top of it. Although HTTP/3 is currently the only protocol specified on top of Quic, there are discussions and will to port other protocols on top of Quic. While the purpose is similar to NetClient/NetServer there are a few significant differences that would make the `io.vertx.core.net` API reuse. - QUIC mandates TLS and does not support TLS upgrade - QUIC requires to bind a _physical_ UDP socket on client and server prior other interactions - QUIC provides connections multiplexing streams - A connection can be closed with a reason - Streams can be single duplex or full duplex - Server load balancing operates in a different fashion Vert.x can facilitate the usage of Quic in the Java ecosystem by providing a comprehensive solution and explore ways of using Netty codecs on top of Quic. This feature provides an API to interact with Quic transport as a server or a client, very much like the existing TCP socket API. It also provides an internal API to interact with the underlying Netty configuration to plugin codecs and use messages instead of buffers. Changes: Quic API and implementation.
c79ddc6 to
d3ed8e7
Compare
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Introduce QUIC server/client which can be used as basis for application protocols.
While the purpose is similar to
NetClient/NetServerthere are a few significant differences that would make theio.vertx.core.netAPI reuse.Todo